package configs

import (
	"fmt"
	"github.com/gorilla/websocket"
	"sync"
)

type Client struct {
	Conn *websocket.Conn // websocket连接
	Name string          // 用户名称
}

// ReadMsg 读数据
func (c Client) ReadMsg() {
	for {
		// 读取消息。如果连接断开，则会返回错误
		_, msgData, err := c.Conn.ReadMessage()

		// 如果返回错误，就退出循环
		if err != nil {
			fmt.Println(err.Error())
			break
		}

		//如果没有错误，则把用户发送的信息放入message通道中
		var msg Message
		msg.Name = c.Name
		msg.EventType = 0
		msg.Message = string(msgData)
		MessagesChan <- msg
	}
}

type Message struct {
	EventType byte   `json:"type"`    // 0表示用户发布消息；1表示用户进入；2表示用户退出
	Name      string `json:"name"`    // 用户名称
	Message   string `json:"message"` // 消息内容
}

// MessagesChan 消息通道
var MessagesChan = make(chan Message, 18)

// Clients 用户组映射
var Clients = make(map[Client]bool)

// ClientsSync 有锁用户组，避免出问题
var ClientsSync = sync.Map{}
